{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 埃姆斯房价预测学习"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 导入工具包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np # linear algebra\n",
    "import pandas as pd # data processing, CSV file I/O\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "#color = sns.color_palette()\n",
    "from scipy import stats\n",
    "\n",
    "%matplotlib inline "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "#读取数据\n",
    "train = pd.read_csv('C:\\\\Users\\\\dell\\\\Desktop\\\\ai\\\\one-week\\\\homework\\\\homework\\\\ames\\\\Ames_House_train.csv')\n",
    "test = pd.read_csv('C:\\\\Users\\\\dell\\\\Desktop\\\\ai\\\\one-week\\\\homework\\\\homework\\\\ames\\\\Ames_House_test.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1460, 81)"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1459, 80)"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.shape \n",
    "#缺少一列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Id</th>\n",
       "      <th>MSSubClass</th>\n",
       "      <th>MSZoning</th>\n",
       "      <th>LotFrontage</th>\n",
       "      <th>LotArea</th>\n",
       "      <th>Street</th>\n",
       "      <th>Alley</th>\n",
       "      <th>LotShape</th>\n",
       "      <th>LandContour</th>\n",
       "      <th>Utilities</th>\n",
       "      <th>...</th>\n",
       "      <th>PoolArea</th>\n",
       "      <th>PoolQC</th>\n",
       "      <th>Fence</th>\n",
       "      <th>MiscFeature</th>\n",
       "      <th>MiscVal</th>\n",
       "      <th>MoSold</th>\n",
       "      <th>YrSold</th>\n",
       "      <th>SaleType</th>\n",
       "      <th>SaleCondition</th>\n",
       "      <th>SalePrice</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>60</td>\n",
       "      <td>RL</td>\n",
       "      <td>65.0</td>\n",
       "      <td>8450</td>\n",
       "      <td>Pave</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Reg</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>AllPub</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>2008</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>208500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>20</td>\n",
       "      <td>RL</td>\n",
       "      <td>80.0</td>\n",
       "      <td>9600</td>\n",
       "      <td>Pave</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Reg</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>AllPub</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>2007</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>181500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>60</td>\n",
       "      <td>RL</td>\n",
       "      <td>68.0</td>\n",
       "      <td>11250</td>\n",
       "      <td>Pave</td>\n",
       "      <td>NaN</td>\n",
       "      <td>IR1</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>AllPub</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "      <td>2008</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>223500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>70</td>\n",
       "      <td>RL</td>\n",
       "      <td>60.0</td>\n",
       "      <td>9550</td>\n",
       "      <td>Pave</td>\n",
       "      <td>NaN</td>\n",
       "      <td>IR1</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>AllPub</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>2006</td>\n",
       "      <td>WD</td>\n",
       "      <td>Abnorml</td>\n",
       "      <td>140000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>60</td>\n",
       "      <td>RL</td>\n",
       "      <td>84.0</td>\n",
       "      <td>14260</td>\n",
       "      <td>Pave</td>\n",
       "      <td>NaN</td>\n",
       "      <td>IR1</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>AllPub</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>2008</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>250000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 81 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   Id  MSSubClass MSZoning  LotFrontage  LotArea Street Alley LotShape  \\\n",
       "0   1          60       RL         65.0     8450   Pave   NaN      Reg   \n",
       "1   2          20       RL         80.0     9600   Pave   NaN      Reg   \n",
       "2   3          60       RL         68.0    11250   Pave   NaN      IR1   \n",
       "3   4          70       RL         60.0     9550   Pave   NaN      IR1   \n",
       "4   5          60       RL         84.0    14260   Pave   NaN      IR1   \n",
       "\n",
       "  LandContour Utilities    ...     PoolArea PoolQC Fence MiscFeature MiscVal  \\\n",
       "0         Lvl    AllPub    ...            0    NaN   NaN         NaN       0   \n",
       "1         Lvl    AllPub    ...            0    NaN   NaN         NaN       0   \n",
       "2         Lvl    AllPub    ...            0    NaN   NaN         NaN       0   \n",
       "3         Lvl    AllPub    ...            0    NaN   NaN         NaN       0   \n",
       "4         Lvl    AllPub    ...            0    NaN   NaN         NaN       0   \n",
       "\n",
       "  MoSold YrSold  SaleType  SaleCondition  SalePrice  \n",
       "0      2   2008        WD         Normal     208500  \n",
       "1      5   2007        WD         Normal     181500  \n",
       "2      9   2008        WD         Normal     223500  \n",
       "3      2   2006        WD        Abnorml     140000  \n",
       "4     12   2008        WD         Normal     250000  \n",
       "\n",
       "[5 rows x 81 columns]"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#预览下数据\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "训练集删除后 : (1460, 80) \n",
      "测试集删除后 : (1459, 79) \n"
     ]
    }
   ],
   "source": [
    "#删除编号字段\n",
    "train.drop(\"Id\", axis = 1, inplace = True)\n",
    "test.drop(\"Id\", axis = 1, inplace = True)\n",
    "\n",
    "print(\"\\n训练集删除后 : {} \".format(train.shape))\n",
    "print(\"测试集删除后 : {} \".format(test.shape))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1460 entries, 0 to 1459\n",
      "Data columns (total 80 columns):\n",
      "MSSubClass       1460 non-null int64\n",
      "MSZoning         1460 non-null object\n",
      "LotFrontage      1201 non-null float64\n",
      "LotArea          1460 non-null int64\n",
      "Street           1460 non-null object\n",
      "Alley            91 non-null object\n",
      "LotShape         1460 non-null object\n",
      "LandContour      1460 non-null object\n",
      "Utilities        1460 non-null object\n",
      "LotConfig        1460 non-null object\n",
      "LandSlope        1460 non-null object\n",
      "Neighborhood     1460 non-null object\n",
      "Condition1       1460 non-null object\n",
      "Condition2       1460 non-null object\n",
      "BldgType         1460 non-null object\n",
      "HouseStyle       1460 non-null object\n",
      "OverallQual      1460 non-null int64\n",
      "OverallCond      1460 non-null int64\n",
      "YearBuilt        1460 non-null int64\n",
      "YearRemodAdd     1460 non-null int64\n",
      "RoofStyle        1460 non-null object\n",
      "RoofMatl         1460 non-null object\n",
      "Exterior1st      1460 non-null object\n",
      "Exterior2nd      1460 non-null object\n",
      "MasVnrType       1452 non-null object\n",
      "MasVnrArea       1452 non-null float64\n",
      "ExterQual        1460 non-null object\n",
      "ExterCond        1460 non-null object\n",
      "Foundation       1460 non-null object\n",
      "BsmtQual         1423 non-null object\n",
      "BsmtCond         1423 non-null object\n",
      "BsmtExposure     1422 non-null object\n",
      "BsmtFinType1     1423 non-null object\n",
      "BsmtFinSF1       1460 non-null int64\n",
      "BsmtFinType2     1422 non-null object\n",
      "BsmtFinSF2       1460 non-null int64\n",
      "BsmtUnfSF        1460 non-null int64\n",
      "TotalBsmtSF      1460 non-null int64\n",
      "Heating          1460 non-null object\n",
      "HeatingQC        1460 non-null object\n",
      "CentralAir       1460 non-null object\n",
      "Electrical       1459 non-null object\n",
      "1stFlrSF         1460 non-null int64\n",
      "2ndFlrSF         1460 non-null int64\n",
      "LowQualFinSF     1460 non-null int64\n",
      "GrLivArea        1460 non-null int64\n",
      "BsmtFullBath     1460 non-null int64\n",
      "BsmtHalfBath     1460 non-null int64\n",
      "FullBath         1460 non-null int64\n",
      "HalfBath         1460 non-null int64\n",
      "BedroomAbvGr     1460 non-null int64\n",
      "KitchenAbvGr     1460 non-null int64\n",
      "KitchenQual      1460 non-null object\n",
      "TotRmsAbvGrd     1460 non-null int64\n",
      "Functional       1460 non-null object\n",
      "Fireplaces       1460 non-null int64\n",
      "FireplaceQu      770 non-null object\n",
      "GarageType       1379 non-null object\n",
      "GarageYrBlt      1379 non-null float64\n",
      "GarageFinish     1379 non-null object\n",
      "GarageCars       1460 non-null int64\n",
      "GarageArea       1460 non-null int64\n",
      "GarageQual       1379 non-null object\n",
      "GarageCond       1379 non-null object\n",
      "PavedDrive       1460 non-null object\n",
      "WoodDeckSF       1460 non-null int64\n",
      "OpenPorchSF      1460 non-null int64\n",
      "EnclosedPorch    1460 non-null int64\n",
      "3SsnPorch        1460 non-null int64\n",
      "ScreenPorch      1460 non-null int64\n",
      "PoolArea         1460 non-null int64\n",
      "PoolQC           7 non-null object\n",
      "Fence            281 non-null object\n",
      "MiscFeature      54 non-null object\n",
      "MiscVal          1460 non-null int64\n",
      "MoSold           1460 non-null int64\n",
      "YrSold           1460 non-null int64\n",
      "SaleType         1460 non-null object\n",
      "SaleCondition    1460 non-null object\n",
      "SalePrice        1460 non-null int64\n",
      "dtypes: float64(3), int64(34), object(43)\n",
      "memory usage: 912.6+ KB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Missing Ratio:</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>PoolQC</th>\n",
       "      <td>99.520548</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MiscFeature</th>\n",
       "      <td>96.301370</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Alley</th>\n",
       "      <td>93.767123</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Fence</th>\n",
       "      <td>80.753425</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             Missing Ratio:\n",
       "PoolQC            99.520548\n",
       "MiscFeature       96.301370\n",
       "Alley             93.767123\n",
       "Fence             80.753425"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#把空值率在80%以上筛选出来，\n",
    "train_na=(train.isnull().sum()/len(train))*100\n",
    "train_na=train_na.drop(train_na[train_na<80].index).sort_values(ascending=False)[:30]\n",
    "missing_data=pd.DataFrame({'Missing Ratio:' : train_na})\n",
    "#train.shape\n",
    "missing_data.head(20)\n",
    "#结果有 poolqc 游泳池质量（有游泳池面积特征，此特征考虑删除）， MiscFeature杂项类别 （杂项且na较多，删掉） Alley所在巷通道类型（有所在道路类型类似特征，删掉）\n",
    "#Fence 围栏质量（na较多，删除）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>MSSubClass</th>\n",
       "      <th>LotFrontage</th>\n",
       "      <th>LotArea</th>\n",
       "      <th>OverallQual</th>\n",
       "      <th>OverallCond</th>\n",
       "      <th>YearBuilt</th>\n",
       "      <th>YearRemodAdd</th>\n",
       "      <th>MasVnrArea</th>\n",
       "      <th>BsmtFinSF1</th>\n",
       "      <th>BsmtFinSF2</th>\n",
       "      <th>...</th>\n",
       "      <th>WoodDeckSF</th>\n",
       "      <th>OpenPorchSF</th>\n",
       "      <th>EnclosedPorch</th>\n",
       "      <th>3SsnPorch</th>\n",
       "      <th>ScreenPorch</th>\n",
       "      <th>PoolArea</th>\n",
       "      <th>MiscVal</th>\n",
       "      <th>MoSold</th>\n",
       "      <th>YrSold</th>\n",
       "      <th>SalePrice</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1201.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1452.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>56.897260</td>\n",
       "      <td>70.049958</td>\n",
       "      <td>10516.828082</td>\n",
       "      <td>6.099315</td>\n",
       "      <td>5.575342</td>\n",
       "      <td>1971.267808</td>\n",
       "      <td>1984.865753</td>\n",
       "      <td>103.685262</td>\n",
       "      <td>443.639726</td>\n",
       "      <td>46.549315</td>\n",
       "      <td>...</td>\n",
       "      <td>94.244521</td>\n",
       "      <td>46.660274</td>\n",
       "      <td>21.954110</td>\n",
       "      <td>3.409589</td>\n",
       "      <td>15.060959</td>\n",
       "      <td>2.758904</td>\n",
       "      <td>43.489041</td>\n",
       "      <td>6.321918</td>\n",
       "      <td>2007.815753</td>\n",
       "      <td>180921.195890</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>42.300571</td>\n",
       "      <td>24.284752</td>\n",
       "      <td>9981.264932</td>\n",
       "      <td>1.382997</td>\n",
       "      <td>1.112799</td>\n",
       "      <td>30.202904</td>\n",
       "      <td>20.645407</td>\n",
       "      <td>181.066207</td>\n",
       "      <td>456.098091</td>\n",
       "      <td>161.319273</td>\n",
       "      <td>...</td>\n",
       "      <td>125.338794</td>\n",
       "      <td>66.256028</td>\n",
       "      <td>61.119149</td>\n",
       "      <td>29.317331</td>\n",
       "      <td>55.757415</td>\n",
       "      <td>40.177307</td>\n",
       "      <td>496.123024</td>\n",
       "      <td>2.703626</td>\n",
       "      <td>1.328095</td>\n",
       "      <td>79442.502883</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>20.000000</td>\n",
       "      <td>21.000000</td>\n",
       "      <td>1300.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1872.000000</td>\n",
       "      <td>1950.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2006.000000</td>\n",
       "      <td>34900.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>20.000000</td>\n",
       "      <td>59.000000</td>\n",
       "      <td>7553.500000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>1954.000000</td>\n",
       "      <td>1967.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>2007.000000</td>\n",
       "      <td>129975.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>50.000000</td>\n",
       "      <td>69.000000</td>\n",
       "      <td>9478.500000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>1973.000000</td>\n",
       "      <td>1994.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>383.500000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>25.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>2008.000000</td>\n",
       "      <td>163000.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>70.000000</td>\n",
       "      <td>80.000000</td>\n",
       "      <td>11601.500000</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>2000.000000</td>\n",
       "      <td>2004.000000</td>\n",
       "      <td>166.000000</td>\n",
       "      <td>712.250000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>168.000000</td>\n",
       "      <td>68.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>2009.000000</td>\n",
       "      <td>214000.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>190.000000</td>\n",
       "      <td>313.000000</td>\n",
       "      <td>215245.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>9.000000</td>\n",
       "      <td>2010.000000</td>\n",
       "      <td>2010.000000</td>\n",
       "      <td>1600.000000</td>\n",
       "      <td>5644.000000</td>\n",
       "      <td>1474.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>857.000000</td>\n",
       "      <td>547.000000</td>\n",
       "      <td>552.000000</td>\n",
       "      <td>508.000000</td>\n",
       "      <td>480.000000</td>\n",
       "      <td>738.000000</td>\n",
       "      <td>15500.000000</td>\n",
       "      <td>12.000000</td>\n",
       "      <td>2010.000000</td>\n",
       "      <td>755000.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>8 rows × 37 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        MSSubClass  LotFrontage        LotArea  OverallQual  OverallCond  \\\n",
       "count  1460.000000  1201.000000    1460.000000  1460.000000  1460.000000   \n",
       "mean     56.897260    70.049958   10516.828082     6.099315     5.575342   \n",
       "std      42.300571    24.284752    9981.264932     1.382997     1.112799   \n",
       "min      20.000000    21.000000    1300.000000     1.000000     1.000000   \n",
       "25%      20.000000    59.000000    7553.500000     5.000000     5.000000   \n",
       "50%      50.000000    69.000000    9478.500000     6.000000     5.000000   \n",
       "75%      70.000000    80.000000   11601.500000     7.000000     6.000000   \n",
       "max     190.000000   313.000000  215245.000000    10.000000     9.000000   \n",
       "\n",
       "         YearBuilt  YearRemodAdd   MasVnrArea   BsmtFinSF1   BsmtFinSF2  \\\n",
       "count  1460.000000   1460.000000  1452.000000  1460.000000  1460.000000   \n",
       "mean   1971.267808   1984.865753   103.685262   443.639726    46.549315   \n",
       "std      30.202904     20.645407   181.066207   456.098091   161.319273   \n",
       "min    1872.000000   1950.000000     0.000000     0.000000     0.000000   \n",
       "25%    1954.000000   1967.000000     0.000000     0.000000     0.000000   \n",
       "50%    1973.000000   1994.000000     0.000000   383.500000     0.000000   \n",
       "75%    2000.000000   2004.000000   166.000000   712.250000     0.000000   \n",
       "max    2010.000000   2010.000000  1600.000000  5644.000000  1474.000000   \n",
       "\n",
       "           ...         WoodDeckSF  OpenPorchSF  EnclosedPorch    3SsnPorch  \\\n",
       "count      ...        1460.000000  1460.000000    1460.000000  1460.000000   \n",
       "mean       ...          94.244521    46.660274      21.954110     3.409589   \n",
       "std        ...         125.338794    66.256028      61.119149    29.317331   \n",
       "min        ...           0.000000     0.000000       0.000000     0.000000   \n",
       "25%        ...           0.000000     0.000000       0.000000     0.000000   \n",
       "50%        ...           0.000000    25.000000       0.000000     0.000000   \n",
       "75%        ...         168.000000    68.000000       0.000000     0.000000   \n",
       "max        ...         857.000000   547.000000     552.000000   508.000000   \n",
       "\n",
       "       ScreenPorch     PoolArea       MiscVal       MoSold       YrSold  \\\n",
       "count  1460.000000  1460.000000   1460.000000  1460.000000  1460.000000   \n",
       "mean     15.060959     2.758904     43.489041     6.321918  2007.815753   \n",
       "std      55.757415    40.177307    496.123024     2.703626     1.328095   \n",
       "min       0.000000     0.000000      0.000000     1.000000  2006.000000   \n",
       "25%       0.000000     0.000000      0.000000     5.000000  2007.000000   \n",
       "50%       0.000000     0.000000      0.000000     6.000000  2008.000000   \n",
       "75%       0.000000     0.000000      0.000000     8.000000  2009.000000   \n",
       "max     480.000000   738.000000  15500.000000    12.000000  2010.000000   \n",
       "\n",
       "           SalePrice  \n",
       "count    1460.000000  \n",
       "mean   180921.195890  \n",
       "std     79442.502883  \n",
       "min     34900.000000  \n",
       "25%    129975.000000  \n",
       "50%    163000.000000  \n",
       "75%    214000.000000  \n",
       "max    755000.000000  \n",
       "\n",
       "[8 rows x 37 columns]"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#查看数值特征的平均值、方差、4分位数、中位数、4分之3分位数，最大值、最小值等\n",
    "train.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      " mu = 12.02 and sigma = 0.40\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x209c842da58>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#查看房价的对数分布情况\n",
    "\n",
    "train[\"SalePrice\"] = np.log1p(train[\"SalePrice\"])\n",
    "\n",
    "#花直方图\n",
    "sns.distplot(train['SalePrice'] , fit=stats.norm);\n",
    "\n",
    "# 使用stats.norm 获取均值及方差\n",
    "(mu, sigma) = stats.norm.fit(train['SalePrice'])\n",
    "print( '\\n mu = {:.2f} and sigma = {:.2f}\\n'.format(mu, sigma))\n",
    "\n",
    "plt.ylabel('频率')\n",
    "plt.title('房价对数分布')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x209c86e19e8>"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x209c86634a8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#查看特征相关性，利用热图展现，相关性分析只对数值类特征处理，类别特征不计算\n",
    "corrmat = train.corr()\n",
    "plt.subplots(figsize=(13,10))\n",
    "sns.heatmap(corrmat, vmax=0.9, square=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 特征工程\n",
    "   特征工程非常重要，作业做完需要仔细学习"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 特征选择\n",
    "方法：1、去掉取值变化小的特征\n",
    "2、单变量特征选择\n",
    "  2.1：Pearson相关系数 \n",
    "  2.2：互信息和最大信息系数\n",
    "  2.3：距离相关系数\n",
    "  2.4：基于学习模型的特征排序\n",
    "3、 线性模型和正则化\n",
    "  3.1：正则化模型\n",
    "  3.2：L1正则化/Lasso\n",
    "  3.3：L2正则化\n",
    "4、随机森林\n",
    "  4.1 平均不纯度减少\n",
    "  4.2 平均精确率减少\n",
    "5 两种顶层特征选择算法\n",
    "  5.1 稳定性选择\n",
    "  5.2 递归特征消除"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1460, 76)"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#删除包含大部分空值的特征，\n",
    "train = train.drop(['PoolQC','MiscFeature','Alley','Fence'],axis =1)\n",
    "train.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 特征构建"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "MSSubClass       0\n",
       "MSZoning         0\n",
       "LotFrontage      0\n",
       "LotArea          0\n",
       "Street           0\n",
       "LotShape         0\n",
       "LandContour      0\n",
       "Utilities        0\n",
       "LotConfig        0\n",
       "LandSlope        0\n",
       "Neighborhood     0\n",
       "Condition1       0\n",
       "Condition2       0\n",
       "BldgType         0\n",
       "HouseStyle       0\n",
       "OverallQual      0\n",
       "OverallCond      0\n",
       "YearBuilt        0\n",
       "YearRemodAdd     0\n",
       "RoofStyle        0\n",
       "RoofMatl         0\n",
       "Exterior1st      0\n",
       "Exterior2nd      0\n",
       "MasVnrType       0\n",
       "MasVnrArea       0\n",
       "ExterQual        0\n",
       "ExterCond        0\n",
       "Foundation       0\n",
       "BsmtQual         0\n",
       "BsmtCond         0\n",
       "                ..\n",
       "BsmtHalfBath     0\n",
       "FullBath         0\n",
       "HalfBath         0\n",
       "BedroomAbvGr     0\n",
       "KitchenAbvGr     0\n",
       "KitchenQual      0\n",
       "TotRmsAbvGrd     0\n",
       "Functional       0\n",
       "Fireplaces       0\n",
       "FireplaceQu      0\n",
       "GarageType       0\n",
       "GarageYrBlt      0\n",
       "GarageFinish     0\n",
       "GarageCars       0\n",
       "GarageArea       0\n",
       "GarageQual       0\n",
       "GarageCond       0\n",
       "PavedDrive       0\n",
       "WoodDeckSF       0\n",
       "OpenPorchSF      0\n",
       "EnclosedPorch    0\n",
       "3SsnPorch        0\n",
       "ScreenPorch      0\n",
       "PoolArea         0\n",
       "MiscVal          0\n",
       "MoSold           0\n",
       "YrSold           0\n",
       "SaleType         0\n",
       "SaleCondition    0\n",
       "SalePrice        0\n",
       "Length: 76, dtype: int64"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#填充剩余空值列\n",
    "#借鉴kaggle的方法、房屋到街道的距离与室内的物理位置相关，根据Neighborhood 分组，取lotFrontage的中位数填充\n",
    "train[\"LotFrontage\"] = train.groupby(\"Neighborhood\")[\"LotFrontage\"].transform(\n",
    "    lambda x: x.fillna(x.median()))\n",
    "#表层砌体类型和表层砌体面积，空值表示没有，分别填充None和0\n",
    "train[\"MasVnrType\"] = train[\"MasVnrType\"].fillna(\"NA\")\n",
    "train[\"MasVnrArea\"] = train[\"MasVnrArea\"].fillna(0)\n",
    "#地下室相关特征填充，NA表示无地下室，填充None\n",
    "for col in ('BsmtQual', 'BsmtCond', 'BsmtExposure', 'BsmtFinType1', 'BsmtFinType2'):\n",
    "    train[col] = train[col].fillna('NA')\n",
    "#电气系统填充众数，mode()返回众数数组，[0]代表数组第一个元素\n",
    "train['Electrical'] = train['Electrical'].fillna(train['Electrical'].mode()[0])\n",
    "#壁炉质量na表示没有\n",
    "train[\"FireplaceQu\"] = train[\"FireplaceQu\"].fillna(\"NA\")\n",
    "#车库相关特征，na表示没有填充NA\n",
    "for col in ('GarageType', 'GarageFinish', 'GarageQual', 'GarageCond'):\n",
    "    train[col] = train[col].fillna('NA')\n",
    "train['GarageYrBlt'] = train['GarageYrBlt'].fillna(0)\n",
    "#检查下空值是否全部处理\n",
    "train.isnull().sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([3, 5, 5, ..., 2, 3, 3], dtype=int64)"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#对类别特征编码\n",
    "#对一些类别特征字段且为数字类型字段转换为字符类型\n",
    "#房地产类别字段处理为字符类型\n",
    "train['MSSubClass']=train['MSSubClass'].apply(str)\n",
    "#总体条件评级、销售年份、销售月份处理为字符类型\n",
    "train['OverallCond'] = train['OverallCond'].astype(str)\n",
    "train['YrSold'] = train['YrSold'].astype(str)\n",
    "train['MoSold'] = train['MoSold'].astype(str)\n",
    "\n",
    "#标准化标签，对类别特征转换为标签值,\n",
    "#与OneHotEncoder 不同，LabelEncoder 对单列特征做编号，OneHotEncoder会把类别特征转换为多列，类别特征数目决定分的列数\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "cols = ('FireplaceQu', 'BsmtQual', 'BsmtCond', 'GarageQual', 'GarageCond', \n",
    "        'ExterQual', 'ExterCond','HeatingQC',  'KitchenQual', 'BsmtFinType1', \n",
    "        'BsmtFinType2', 'Functional', 'BsmtExposure', 'GarageFinish', 'LandSlope',\n",
    "        'LotShape', 'PavedDrive', 'Street', 'CentralAir', 'MSSubClass', 'OverallCond', \n",
    "        'YrSold', 'MoSold')\n",
    "\n",
    "for c in cols:\n",
    "    lbl = LabelEncoder() \n",
    "    lbl.fit(list(train[c].values)) \n",
    "    train[c] = lbl.transform(list(train[c].values))\n",
    "#检查下        \n",
    "train['FireplaceQu'].values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [],
   "source": [
    "#构建一个特征房屋总面积=地下室总面积+1层面积+2层面积\n",
    "train['TotalSF'] = train['TotalBsmtSF'] + train['1stFlrSF'] + train['2ndFlrSF']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Skew in numerical features: \n",
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Skew</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>MiscVal</th>\n",
       "      <td>24.451640</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>PoolArea</th>\n",
       "      <td>14.813135</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>LotArea</th>\n",
       "      <td>12.195142</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3SsnPorch</th>\n",
       "      <td>10.293752</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>LowQualFinSF</th>\n",
       "      <td>9.002080</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>LandSlope</th>\n",
       "      <td>4.808735</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>KitchenAbvGr</th>\n",
       "      <td>4.483784</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>BsmtFinSF2</th>\n",
       "      <td>4.250888</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ScreenPorch</th>\n",
       "      <td>4.117977</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>BsmtHalfBath</th>\n",
       "      <td>4.099186</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   Skew\n",
       "MiscVal       24.451640\n",
       "PoolArea      14.813135\n",
       "LotArea       12.195142\n",
       "3SsnPorch     10.293752\n",
       "LowQualFinSF   9.002080\n",
       "LandSlope      4.808735\n",
       "KitchenAbvGr   4.483784\n",
       "BsmtFinSF2     4.250888\n",
       "ScreenPorch    4.117977\n",
       "BsmtHalfBath   4.099186"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#获取偏度比较大的数字类特征，\n",
    "numeric_feats = train.dtypes[train.dtypes != \"object\"].index\n",
    "# Check the skew of all numerical features\n",
    "skewed_feats = train[numeric_feats].apply(lambda x: stats.skew(x.dropna())).sort_values(ascending=False)\n",
    "print(\"\\nSkew in numerical features: \\n\")\n",
    "skewness = pd.DataFrame({'Skew' :skewed_feats})\n",
    "skewness.head(10)\n",
    "\n",
    "#对偏度大的特征什么情况下需要处理，怎么处理，周末问老师"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>MSSubClass</th>\n",
       "      <th>LotFrontage</th>\n",
       "      <th>LotArea</th>\n",
       "      <th>Street</th>\n",
       "      <th>LotShape</th>\n",
       "      <th>LandSlope</th>\n",
       "      <th>OverallQual</th>\n",
       "      <th>OverallCond</th>\n",
       "      <th>YearBuilt</th>\n",
       "      <th>YearRemodAdd</th>\n",
       "      <th>...</th>\n",
       "      <th>SaleType_ConLw</th>\n",
       "      <th>SaleType_New</th>\n",
       "      <th>SaleType_Oth</th>\n",
       "      <th>SaleType_WD</th>\n",
       "      <th>SaleCondition_Abnorml</th>\n",
       "      <th>SaleCondition_AdjLand</th>\n",
       "      <th>SaleCondition_Alloca</th>\n",
       "      <th>SaleCondition_Family</th>\n",
       "      <th>SaleCondition_Normal</th>\n",
       "      <th>SaleCondition_Partial</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>9</td>\n",
       "      <td>65.0</td>\n",
       "      <td>8450</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "      <td>4</td>\n",
       "      <td>2003</td>\n",
       "      <td>2003</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4</td>\n",
       "      <td>80.0</td>\n",
       "      <td>9600</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>7</td>\n",
       "      <td>1976</td>\n",
       "      <td>1976</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>9</td>\n",
       "      <td>68.0</td>\n",
       "      <td>11250</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "      <td>4</td>\n",
       "      <td>2001</td>\n",
       "      <td>2002</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>10</td>\n",
       "      <td>60.0</td>\n",
       "      <td>9550</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "      <td>4</td>\n",
       "      <td>1915</td>\n",
       "      <td>1970</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>9</td>\n",
       "      <td>84.0</td>\n",
       "      <td>14260</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "      <td>4</td>\n",
       "      <td>2000</td>\n",
       "      <td>2000</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 217 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   MSSubClass  LotFrontage  LotArea  Street  LotShape  LandSlope  OverallQual  \\\n",
       "0           9         65.0     8450       1         3          0            7   \n",
       "1           4         80.0     9600       1         3          0            6   \n",
       "2           9         68.0    11250       1         0          0            7   \n",
       "3          10         60.0     9550       1         0          0            7   \n",
       "4           9         84.0    14260       1         0          0            8   \n",
       "\n",
       "   OverallCond  YearBuilt  YearRemodAdd          ...            \\\n",
       "0            4       2003          2003          ...             \n",
       "1            7       1976          1976          ...             \n",
       "2            4       2001          2002          ...             \n",
       "3            4       1915          1970          ...             \n",
       "4            4       2000          2000          ...             \n",
       "\n",
       "   SaleType_ConLw  SaleType_New  SaleType_Oth  SaleType_WD  \\\n",
       "0               0             0             0            1   \n",
       "1               0             0             0            1   \n",
       "2               0             0             0            1   \n",
       "3               0             0             0            1   \n",
       "4               0             0             0            1   \n",
       "\n",
       "   SaleCondition_Abnorml  SaleCondition_AdjLand  SaleCondition_Alloca  \\\n",
       "0                      0                      0                     0   \n",
       "1                      0                      0                     0   \n",
       "2                      0                      0                     0   \n",
       "3                      1                      0                     0   \n",
       "4                      0                      0                     0   \n",
       "\n",
       "   SaleCondition_Family  SaleCondition_Normal  SaleCondition_Partial  \n",
       "0                     0                     1                      0  \n",
       "1                     0                     1                      0  \n",
       "2                     0                     1                      0  \n",
       "3                     0                     0                      0  \n",
       "4                     0                     1                      0  \n",
       "\n",
       "[5 rows x 217 columns]"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#对编码后的类别特征做独热编码，去除编码的数值大小影响 get_dummies或OneHotEncoder\n",
    "train = pd.get_dummies(train)\n",
    "train.shape\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 确定模型类型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 模型选择及评估"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [],
   "source": [
    "#分离测试数据及训练数据\n",
    "#因为测试数据没有房价字段，从训练数据集分一些出来作为测试数据\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "train_data = train.drop('SalePrice',axis = 1)\n",
    "train_target = train['SalePrice'].values\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(\n",
    "train_data, train_target, test_size=0.4, random_state=0)\n",
    "columns = X_train.columns\n",
    "\n",
    "#X_test.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [],
   "source": [
    "#数据标准化\n",
    "#from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "#生成标准化器\n",
    "#ss_X = StandardScaler()\n",
    "#ss_y = StandardScaler()\n",
    "\n",
    "#分别对训练和测试数据的特征以及目标值进行标准化处理 x= x- μ/σ\n",
    "#X_train = ss_X.fit_transform(X_train)\n",
    "#X_test = ss_X.fit_transform(X_test)\n",
    "\n",
    "#对y标准化按照例子是说，防止w差异太大，正则参数范围有限，y= wTx + λ|w| \n",
    "#y_train = ss_y.fit_transform(y_train.reshape(-1,1))\n",
    "#y_test = ss_y.transform(y_test.reshape(-1,1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 先尝试OLS"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>coef</th>\n",
       "      <th>columns</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>106</th>\n",
       "      <td>0.467373</td>\n",
       "      <td>Condition2_Artery</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>107</th>\n",
       "      <td>0.393596</td>\n",
       "      <td>Condition2_Feedr</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>108</th>\n",
       "      <td>0.365330</td>\n",
       "      <td>Condition2_Norm</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>207</th>\n",
       "      <td>0.339613</td>\n",
       "      <td>SaleType_New</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>204</th>\n",
       "      <td>0.264316</td>\n",
       "      <td>SaleType_ConLD</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>181</th>\n",
       "      <td>0.213903</td>\n",
       "      <td>Foundation_Stone</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>212</th>\n",
       "      <td>0.154743</td>\n",
       "      <td>SaleCondition_Alloca</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>78</th>\n",
       "      <td>0.150045</td>\n",
       "      <td>Neighborhood_Crawfor</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>188</th>\n",
       "      <td>0.133509</td>\n",
       "      <td>Heating_Wall</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.129894</td>\n",
       "      <td>Street</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>57</th>\n",
       "      <td>0.129326</td>\n",
       "      <td>MSZoning_FV</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>202</th>\n",
       "      <td>0.117821</td>\n",
       "      <td>SaleType_CWD</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>94</th>\n",
       "      <td>0.111724</td>\n",
       "      <td>Neighborhood_StoneBr</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65</th>\n",
       "      <td>0.110127</td>\n",
       "      <td>Utilities_AllPub</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>111</th>\n",
       "      <td>0.103934</td>\n",
       "      <td>Condition2_RRAe</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>132</th>\n",
       "      <td>0.103934</td>\n",
       "      <td>RoofStyle_Shed</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>161</th>\n",
       "      <td>0.100445</td>\n",
       "      <td>Exterior2nd_CmentBd</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>149</th>\n",
       "      <td>0.100381</td>\n",
       "      <td>Exterior1st_MetalSd</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>144</th>\n",
       "      <td>0.099413</td>\n",
       "      <td>Exterior1st_BrkFace</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>214</th>\n",
       "      <td>0.098473</td>\n",
       "      <td>SaleCondition_Normal</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96</th>\n",
       "      <td>0.094376</td>\n",
       "      <td>Neighborhood_Veenker</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>60</th>\n",
       "      <td>0.090180</td>\n",
       "      <td>MSZoning_RM</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>213</th>\n",
       "      <td>0.086783</td>\n",
       "      <td>SaleCondition_Family</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>190</th>\n",
       "      <td>0.078879</td>\n",
       "      <td>Electrical_FuseF</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>0.075576</td>\n",
       "      <td>CentralAir</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>140</th>\n",
       "      <td>0.075508</td>\n",
       "      <td>RoofMatl_WdShngl</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>59</th>\n",
       "      <td>0.074062</td>\n",
       "      <td>MSZoning_RL</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>76</th>\n",
       "      <td>0.070421</td>\n",
       "      <td>Neighborhood_ClearCr</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>167</th>\n",
       "      <td>0.068798</td>\n",
       "      <td>Exterior2nd_Stone</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>103</th>\n",
       "      <td>0.068213</td>\n",
       "      <td>Condition1_RRAn</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128</th>\n",
       "      <td>-0.052762</td>\n",
       "      <td>RoofStyle_Gable</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>194</th>\n",
       "      <td>-0.053773</td>\n",
       "      <td>GarageType_2Types</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>165</th>\n",
       "      <td>-0.057182</td>\n",
       "      <td>Exterior2nd_Other</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>159</th>\n",
       "      <td>-0.058387</td>\n",
       "      <td>Exterior2nd_BrkFace</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>89</th>\n",
       "      <td>-0.059175</td>\n",
       "      <td>Neighborhood_OldTown</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>171</th>\n",
       "      <td>-0.059952</td>\n",
       "      <td>Exterior2nd_Wd Shng</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>73</th>\n",
       "      <td>-0.062370</td>\n",
       "      <td>Neighborhood_Blueste</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>177</th>\n",
       "      <td>-0.064660</td>\n",
       "      <td>Foundation_BrkTil</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>117</th>\n",
       "      <td>-0.066124</td>\n",
       "      <td>BldgType_Twnhs</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>102</th>\n",
       "      <td>-0.066656</td>\n",
       "      <td>Condition1_RRAe</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>203</th>\n",
       "      <td>-0.071711</td>\n",
       "      <td>SaleType_Con</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>182</th>\n",
       "      <td>-0.074560</td>\n",
       "      <td>Foundation_Wood</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>-0.075678</td>\n",
       "      <td>KitchenAbvGr</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74</th>\n",
       "      <td>-0.077650</td>\n",
       "      <td>Neighborhood_BrDale</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>206</th>\n",
       "      <td>-0.078866</td>\n",
       "      <td>SaleType_ConLw</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>200</th>\n",
       "      <td>-0.080598</td>\n",
       "      <td>GarageType_NA</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>208</th>\n",
       "      <td>-0.088781</td>\n",
       "      <td>SaleType_Oth</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>139</th>\n",
       "      <td>-0.101727</td>\n",
       "      <td>RoofMatl_WdShake</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>66</th>\n",
       "      <td>-0.110127</td>\n",
       "      <td>Utilities_NoSeWa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>201</th>\n",
       "      <td>-0.120631</td>\n",
       "      <td>SaleType_COD</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>81</th>\n",
       "      <td>-0.121033</td>\n",
       "      <td>Neighborhood_IDOTRR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>191</th>\n",
       "      <td>-0.139211</td>\n",
       "      <td>Electrical_FuseP</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>209</th>\n",
       "      <td>-0.140102</td>\n",
       "      <td>SaleType_WD</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>186</th>\n",
       "      <td>-0.144724</td>\n",
       "      <td>Heating_Grav</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>82</th>\n",
       "      <td>-0.192007</td>\n",
       "      <td>Neighborhood_MeadowV</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>205</th>\n",
       "      <td>-0.221659</td>\n",
       "      <td>SaleType_ConLI</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>215</th>\n",
       "      <td>-0.330404</td>\n",
       "      <td>SaleCondition_Partial</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>56</th>\n",
       "      <td>-0.342194</td>\n",
       "      <td>MSZoning_C (all)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>143</th>\n",
       "      <td>-0.561503</td>\n",
       "      <td>Exterior1st_BrkComm</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>110</th>\n",
       "      <td>-1.330233</td>\n",
       "      <td>Condition2_PosN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>216 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "         coef                columns\n",
       "106  0.467373      Condition2_Artery\n",
       "107  0.393596       Condition2_Feedr\n",
       "108  0.365330        Condition2_Norm\n",
       "207  0.339613           SaleType_New\n",
       "204  0.264316         SaleType_ConLD\n",
       "181  0.213903       Foundation_Stone\n",
       "212  0.154743   SaleCondition_Alloca\n",
       "78   0.150045   Neighborhood_Crawfor\n",
       "188  0.133509           Heating_Wall\n",
       "3    0.129894                 Street\n",
       "57   0.129326            MSZoning_FV\n",
       "202  0.117821           SaleType_CWD\n",
       "94   0.111724   Neighborhood_StoneBr\n",
       "65   0.110127       Utilities_AllPub\n",
       "111  0.103934        Condition2_RRAe\n",
       "132  0.103934         RoofStyle_Shed\n",
       "161  0.100445    Exterior2nd_CmentBd\n",
       "149  0.100381    Exterior1st_MetalSd\n",
       "144  0.099413    Exterior1st_BrkFace\n",
       "214  0.098473   SaleCondition_Normal\n",
       "96   0.094376   Neighborhood_Veenker\n",
       "60   0.090180            MSZoning_RM\n",
       "213  0.086783   SaleCondition_Family\n",
       "190  0.078879       Electrical_FuseF\n",
       "23   0.075576             CentralAir\n",
       "140  0.075508       RoofMatl_WdShngl\n",
       "59   0.074062            MSZoning_RL\n",
       "76   0.070421   Neighborhood_ClearCr\n",
       "167  0.068798      Exterior2nd_Stone\n",
       "103  0.068213        Condition1_RRAn\n",
       "..        ...                    ...\n",
       "128 -0.052762        RoofStyle_Gable\n",
       "194 -0.053773      GarageType_2Types\n",
       "165 -0.057182      Exterior2nd_Other\n",
       "159 -0.058387    Exterior2nd_BrkFace\n",
       "89  -0.059175   Neighborhood_OldTown\n",
       "171 -0.059952    Exterior2nd_Wd Shng\n",
       "73  -0.062370   Neighborhood_Blueste\n",
       "177 -0.064660      Foundation_BrkTil\n",
       "117 -0.066124         BldgType_Twnhs\n",
       "102 -0.066656        Condition1_RRAe\n",
       "203 -0.071711           SaleType_Con\n",
       "182 -0.074560        Foundation_Wood\n",
       "33  -0.075678           KitchenAbvGr\n",
       "74  -0.077650    Neighborhood_BrDale\n",
       "206 -0.078866         SaleType_ConLw\n",
       "200 -0.080598          GarageType_NA\n",
       "208 -0.088781           SaleType_Oth\n",
       "139 -0.101727       RoofMatl_WdShake\n",
       "66  -0.110127       Utilities_NoSeWa\n",
       "201 -0.120631           SaleType_COD\n",
       "81  -0.121033    Neighborhood_IDOTRR\n",
       "191 -0.139211       Electrical_FuseP\n",
       "209 -0.140102            SaleType_WD\n",
       "186 -0.144724           Heating_Grav\n",
       "82  -0.192007   Neighborhood_MeadowV\n",
       "205 -0.221659         SaleType_ConLI\n",
       "215 -0.330404  SaleCondition_Partial\n",
       "56  -0.342194       MSZoning_C (all)\n",
       "143 -0.561503    Exterior1st_BrkComm\n",
       "110 -1.330233        Condition2_PosN\n",
       "\n",
       "[216 rows x 2 columns]"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#模型选择\n",
    "#导入工具包\n",
    "from sklearn.linear_model import LinearRegression\n",
    "\n",
    "#使用默认配置初始化\n",
    "lr = LinearRegression()\n",
    "\n",
    "#不做数据标准化、归一化，标准化数据之后 w 数据超大\n",
    "#训练模型参数\n",
    "lr.fit(X_train, y_train)\n",
    "\n",
    "#使用训练好的模型进行预测 输出值\n",
    "y_test_pred_lr = lr.predict(X_test)\n",
    "y_train_pred_lr = lr.predict(X_train)\n",
    "\n",
    "#mean_squared_error(y_train,y_train_pred_lr)\n",
    "\n",
    "#mean_squared_error(y_test,y_test_pred_lr)\n",
    "#查看各特征的\n",
    "fs = pd.DataFrame({\"columns\":list(columns),\"coef\":list((lr.coef_.T))})\n",
    "fs.sort_values(by=['coef'],ascending=False)\n",
    "\n",
    "#系数都很小，y取对数了\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The mse of LinearRegression on train is 0.008025561137708881\n",
      "The mse of LinearRegression on test is 0.0355961357223303\n",
      "The r2 score of LinearRegression on test is 0.7642916222611204\n",
      "The r2 score of LinearRegression on train is 0.9513526700223239\n"
     ]
    }
   ],
   "source": [
    "#模型评估使用rmse 均方根误差，基础作业采用的是r2，模型评估使用的方法有很多，需要根据需要做选择，后面学习需要注意关注积累\n",
    "#sklearn.metrics.mean_squared_error(y_true, y_pred, sample_weight=None, multioutput=’uniform_average’)\n",
    "from sklearn.metrics import mean_squared_error\n",
    "from sklearn.metrics import r2_score \n",
    "#作业要求模型评估 选用 对数均方差\n",
    "print('The mse of LinearRegression on train is',mean_squared_error(y_train,y_train_pred_lr))\n",
    "print('The mse of LinearRegression on test is',mean_squared_error(y_test,y_test_pred_lr))\n",
    "#r2做对比\n",
    "print ('The r2 score of LinearRegression on test is',r2_score(y_test,y_test_pred_lr))\n",
    "\n",
    "#训练集\n",
    "print ('The r2 score of LinearRegression on train is',r2_score(y_train,y_train_pred_lr))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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wQsveKfW0WTixInMmjWLlpaWhp5veEvSCNbR0cHOO+/M7NmziRioL5PTcMpMnnjiCTo6OpgzZ05D+3DaXJJGsBdeeIHddtvN4B5FIoLddtutqdkUw1uSRjiDe/Rp9ndqeEuSVBjPeUtSSdrahnx/48aN46CDDmLz5s3MmTOHb3/720yZMuVVH+oDH/gA5513Hvvvv/8r1l9xxRW0t7fz9a9//VXvE2DSpEls2rSpX20XLFjAxRdfTGtr69Z17e3tXHXVVVxyySUNHX84OPKWJG3Xa17zGlavXs0999zD1KlTufTSSxvaz2WXXbZNcI8Era2tgx7cW7ZsGdD9Gd6SpH6bP38+69ev37p80UUXcdhhh3HwwQdzwQUXAPDcc8+xaNEiDjnkEA488ECWL18O1Ea9XbfC/ta3vsV+++3HMcccw+233751f2eccQYrVqzYujxp0iQANm3axMKFCzn00EM56KCDuOGGG7apbcOGDRx99NHMnTuXAw88kH/7t3/r12u69dZbOf744wFoa2vjzDPPZMGCBeyzzz6vCPWrr76aww8/nLlz5/LBD35wayCfc845tLa2csABB2ztA6jd+vvCCy/kD/7gD7j++uv7VUt/OW0uSeqXLVu2sHLlSpYuXQrATTfdxNq1a/nxj39MZnLCCSdw22230dnZyV577cX3v/99AJ5++ulX7GfDhg1ccMEFrFq1ismTJ/O2t72NefPmbffYEydO5Hvf+x677LILjz/+OEceeSQnnHDCKy78+od/+AeOPfZYPvvZz7Jlyxaef/75hl7n/fffzy233MKzzz7LG9/4Rs455xzWrVvH8uXLuf3222lpaeHcc8/lmmuu4fTTT+eLX/wiU6dOZcuWLSxcuJC7776bgw8+eGvdP/zhDxuqY3sMb0nSdv3mN79h7ty5PPTQQ7zlLW/hHe94B1AL75tuumlr8G7atIm1a9dy1FFH8fGPf5xPfepTHH/88Rx11FGv2N+dd97JggULmDat9uVZJ510Er/4xS+2W0Nm8pnPfIbbbruNHXbYgfXr17Nx40b23HPPrW0OO+wwzjzzTF566SVOPPFE5s6d29DrXbRoERMmTGDChAlMnz6djRs3snLlSlatWsVhhx22tU+mT58OwHXXXceyZcvYvHkzGzZs4L777tsa3ieddFJDNfTFaXNJ0nZ1nfN++OGHefHFF7ee885Mzj//fFavXs3q1atZt24dS5cuZb/99mPVqlUcdNBBnH/++Vx44YXb7LO3j0qNHz+el19+eev+X3zxRQCuueYaOjs7WbVqFatXr2aPPfbY5nPSRx99NLfddhszZ87ktNNO46qrrmro9U6YMGHr43HjxrF582YykyVLlmx9rT//+c9pa2vjwQcf5OKLL2blypXcfffdLFq06BV17bTTTg3V0BdH3pIGT3+vjB7oK6g1KCZPnswll1zC4sWLOeecczj22GP53Oc+xymnnMKkSZNYv349LS0tbN68malTp3LqqacyadIkrrjiilfs54gjjuCjH/0oTzzxBLvssgvXX389hxxyCFA7T7xq1Sre9773ccMNN/DSSy8Btan36dOn09LSwi233MLDD2/7zZkPP/wwM2fO5KyzzuK5557jrrvu4vTTTx+Q175w4UIWL17Mxz72MaZPn86TTz7Js88+yzPPPMNOO+3E5MmT2bhxIz/4wQ9YsGDBgBxze/oM74j4JnA88FhmHtht28eBi4Bpmfl41N5KfQ34I+B54IzMvGvgy5akMWqY3+jMmzePQw45hGuvvZbTTjuNNWvWMH/+fKB2cdnVV1/NunXr+MQnPsEOO+xAS0sL3/jGN16xjxkzZtDW1sb8+fOZMWMGhx566NaLv8466ywWL17M4YcfzsKFC7eOXE855RTe/e5309rayty5c3nTm960TW233norF110ES0tLUyaNKnXkfeiRYu23lN8/vz5fOhDH+rzde+///584Qtf4J3vfCcvv/wyLS0tXHrppRx55JHMmzePAw44gH322Ye3vvWt/e/MJkRmbr9BxNHAJuCq+vCOiL2By4A3AW+pwvuPgI9QC+8jgK9l5hF9FdHa2ppdVyBKGkUceTdtzZo1vPnNbx7uMjQIevrdRsSqzGzt5Slb9XnOOzNvA57sYdNXgU8C9em/mFrIZ2beAUyJiBl9HUOSJPVfQxesRcQJwPrM/Pdum2YCj9Qtd1TretrH2RHRHhHtnZ2djZQhSdKY9KrDOyJeC3wW+POeNvewrsd5+cxclpmtmdna9XEBSdK2+jq9qfI0+zttZOT9emAO8O8R8RAwC7grIvakNtLeu67tLODRpiqUpDFs4sSJPPHEEwb4KNL1fd4TJ05seB+v+qNimfkzYHrXchXgrdUFazcCH46Ia6ldsPZ0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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x209c81ac828>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#残差直方图\n",
    "f, ax = plt.subplots(figsize=(7, 5))\n",
    "f.tight_layout()\n",
    "ax.hist(y_train - y_train_pred_lr,bins=40,label='Residuals Linear', color='r',alpha=0.5)\n",
    "ax.set_title(\"Histogram of Residuals\")\n",
    "ax.legend(loc='best');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 尝试岭回归测试下"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The mse of LinearRegression on train is 0.008025561137708881\n",
      "The mse of LinearRegression on test is 0.0355961357223303\n",
      "The r2 score of RidgeCV on test is: 0.8354230037501493\n",
      "The r2 score of RidgeCV on train is: 0.9309785447611973\n"
     ]
    }
   ],
   "source": [
    "#岭回归、l2正则\n",
    "from sklearn.linear_model import RidgeCV\n",
    "from sklearn.metrics import mean_squared_error\n",
    "\n",
    "#设置超参数（正则参数）范围，助教说此部分设置是猜的，卿教授说此值设置10的指数\n",
    "alphas = [0.01,0.1,1,10,100]\n",
    "#n_alphas = 20 \n",
    "#alphas = np.logspace(-5,2,n_alphas)\n",
    "\n",
    "#三步走，1、生成实例，2、训练，3、预测\n",
    "#生成一个RidgeCV实例\n",
    "ridge = RidgeCV(alphas=alphas,store_cv_values=True)\n",
    "\n",
    "#模型训练\n",
    "ridge.fit(X_train, y_train)\n",
    "\n",
    "#预测\n",
    "y_test_pred_ridge = ridge.predict(X_test)\n",
    "y_train_pred_ridge = ridge.predict(X_train)\n",
    "\n",
    "#打印残差平方和\n",
    "print('The mse of LinearRegression on train is',mean_squared_error(y_train,y_train_pred_lr))\n",
    "print('The mse of LinearRegression on test is',mean_squared_error(y_test,y_test_pred_lr))\n",
    "\n",
    "#评估，使用R2 评分，做对比\n",
    "print('The r2 score of RidgeCV on test is:',r2_score(y_test,y_test_pred_ridge))\n",
    "print('The r2 score of RidgeCV on train is:',r2_score(y_train,y_train_pred_ridge))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x209c6932b70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "alpha is: 10.0\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>coef_lr</th>\n",
       "      <th>coef_ridge</th>\n",
       "      <th>columns</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>106</th>\n",
       "      <td>0.467373</td>\n",
       "      <td>0.010739</td>\n",
       "      <td>Condition2_Artery</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>107</th>\n",
       "      <td>0.393596</td>\n",
       "      <td>0.017622</td>\n",
       "      <td>Condition2_Feedr</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>108</th>\n",
       "      <td>0.365330</td>\n",
       "      <td>0.084865</td>\n",
       "      <td>Condition2_Norm</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>207</th>\n",
       "      <td>0.339613</td>\n",
       "      <td>0.038120</td>\n",
       "      <td>SaleType_New</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>204</th>\n",
       "      <td>0.264316</td>\n",
       "      <td>0.018743</td>\n",
       "      <td>SaleType_ConLD</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>181</th>\n",
       "      <td>0.213903</td>\n",
       "      <td>0.026592</td>\n",
       "      <td>Foundation_Stone</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>212</th>\n",
       "      <td>0.154743</td>\n",
       "      <td>0.015245</td>\n",
       "      <td>SaleCondition_Alloca</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>78</th>\n",
       "      <td>0.150045</td>\n",
       "      <td>0.100805</td>\n",
       "      <td>Neighborhood_Crawfor</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>188</th>\n",
       "      <td>0.133509</td>\n",
       "      <td>0.010646</td>\n",
       "      <td>Heating_Wall</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.129894</td>\n",
       "      <td>0.033825</td>\n",
       "      <td>Street</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>57</th>\n",
       "      <td>0.129326</td>\n",
       "      <td>0.055046</td>\n",
       "      <td>MSZoning_FV</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>202</th>\n",
       "      <td>0.117821</td>\n",
       "      <td>0.017477</td>\n",
       "      <td>SaleType_CWD</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>94</th>\n",
       "      <td>0.111724</td>\n",
       "      <td>0.064092</td>\n",
       "      <td>Neighborhood_StoneBr</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65</th>\n",
       "      <td>0.110127</td>\n",
       "      <td>0.008426</td>\n",
       "      <td>Utilities_AllPub</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>111</th>\n",
       "      <td>0.103934</td>\n",
       "      <td>-0.001771</td>\n",
       "      <td>Condition2_RRAe</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>132</th>\n",
       "      <td>0.103934</td>\n",
       "      <td>-0.001771</td>\n",
       "      <td>RoofStyle_Shed</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>161</th>\n",
       "      <td>0.100445</td>\n",
       "      <td>-0.017429</td>\n",
       "      <td>Exterior2nd_CmentBd</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>149</th>\n",
       "      <td>0.100381</td>\n",
       "      <td>0.018604</td>\n",
       "      <td>Exterior1st_MetalSd</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>144</th>\n",
       "      <td>0.099413</td>\n",
       "      <td>0.036308</td>\n",
       "      <td>Exterior1st_BrkFace</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>214</th>\n",
       "      <td>0.098473</td>\n",
       "      <td>0.030163</td>\n",
       "      <td>SaleCondition_Normal</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96</th>\n",
       "      <td>0.094376</td>\n",
       "      <td>0.019251</td>\n",
       "      <td>Neighborhood_Veenker</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>60</th>\n",
       "      <td>0.090180</td>\n",
       "      <td>0.016108</td>\n",
       "      <td>MSZoning_RM</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>213</th>\n",
       "      <td>0.086783</td>\n",
       "      <td>-0.004982</td>\n",
       "      <td>SaleCondition_Family</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>190</th>\n",
       "      <td>0.078879</td>\n",
       "      <td>0.014699</td>\n",
       "      <td>Electrical_FuseF</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>0.075576</td>\n",
       "      <td>0.063580</td>\n",
       "      <td>CentralAir</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>140</th>\n",
       "      <td>0.075508</td>\n",
       "      <td>0.026190</td>\n",
       "      <td>RoofMatl_WdShngl</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>59</th>\n",
       "      <td>0.074062</td>\n",
       "      <td>0.039079</td>\n",
       "      <td>MSZoning_RL</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>76</th>\n",
       "      <td>0.070421</td>\n",
       "      <td>0.039174</td>\n",
       "      <td>Neighborhood_ClearCr</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>167</th>\n",
       "      <td>0.068798</td>\n",
       "      <td>0.017861</td>\n",
       "      <td>Exterior2nd_Stone</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>103</th>\n",
       "      <td>0.068213</td>\n",
       "      <td>0.044940</td>\n",
       "      <td>Condition1_RRAn</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128</th>\n",
       "      <td>-0.052762</td>\n",
       "      <td>-0.006583</td>\n",
       "      <td>RoofStyle_Gable</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>194</th>\n",
       "      <td>-0.053773</td>\n",
       "      <td>-0.023101</td>\n",
       "      <td>GarageType_2Types</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>165</th>\n",
       "      <td>-0.057182</td>\n",
       "      <td>-0.000786</td>\n",
       "      <td>Exterior2nd_Other</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>159</th>\n",
       "      <td>-0.058387</td>\n",
       "      <td>-0.020280</td>\n",
       "      <td>Exterior2nd_BrkFace</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>89</th>\n",
       "      <td>-0.059175</td>\n",
       "      <td>-0.017109</td>\n",
       "      <td>Neighborhood_OldTown</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>171</th>\n",
       "      <td>-0.059952</td>\n",
       "      <td>-0.026714</td>\n",
       "      <td>Exterior2nd_Wd Shng</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>73</th>\n",
       "      <td>-0.062370</td>\n",
       "      <td>-0.011970</td>\n",
       "      <td>Neighborhood_Blueste</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>177</th>\n",
       "      <td>-0.064660</td>\n",
       "      <td>-0.037551</td>\n",
       "      <td>Foundation_BrkTil</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>117</th>\n",
       "      <td>-0.066124</td>\n",
       "      <td>-0.025881</td>\n",
       "      <td>BldgType_Twnhs</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>102</th>\n",
       "      <td>-0.066656</td>\n",
       "      <td>-0.022320</td>\n",
       "      <td>Condition1_RRAe</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>203</th>\n",
       "      <td>-0.071711</td>\n",
       "      <td>0.002451</td>\n",
       "      <td>SaleType_Con</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>182</th>\n",
       "      <td>-0.074560</td>\n",
       "      <td>-0.001707</td>\n",
       "      <td>Foundation_Wood</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>-0.075678</td>\n",
       "      <td>-0.036157</td>\n",
       "      <td>KitchenAbvGr</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74</th>\n",
       "      <td>-0.077650</td>\n",
       "      <td>-0.010125</td>\n",
       "      <td>Neighborhood_BrDale</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>206</th>\n",
       "      <td>-0.078866</td>\n",
       "      <td>0.006853</td>\n",
       "      <td>SaleType_ConLw</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>200</th>\n",
       "      <td>-0.080598</td>\n",
       "      <td>-0.000395</td>\n",
       "      <td>GarageType_NA</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>208</th>\n",
       "      <td>-0.088781</td>\n",
       "      <td>0.004967</td>\n",
       "      <td>SaleType_Oth</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>139</th>\n",
       "      <td>-0.101727</td>\n",
       "      <td>-0.014992</td>\n",
       "      <td>RoofMatl_WdShake</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>66</th>\n",
       "      <td>-0.110127</td>\n",
       "      <td>-0.008426</td>\n",
       "      <td>Utilities_NoSeWa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>201</th>\n",
       "      <td>-0.120631</td>\n",
       "      <td>-0.039287</td>\n",
       "      <td>SaleType_COD</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>81</th>\n",
       "      <td>-0.121033</td>\n",
       "      <td>-0.092631</td>\n",
       "      <td>Neighborhood_IDOTRR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>191</th>\n",
       "      <td>-0.139211</td>\n",
       "      <td>-0.013526</td>\n",
       "      <td>Electrical_FuseP</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>209</th>\n",
       "      <td>-0.140102</td>\n",
       "      <td>-0.028663</td>\n",
       "      <td>SaleType_WD</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>186</th>\n",
       "      <td>-0.144724</td>\n",
       "      <td>-0.033594</td>\n",
       "      <td>Heating_Grav</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>82</th>\n",
       "      <td>-0.192007</td>\n",
       "      <td>-0.048158</td>\n",
       "      <td>Neighborhood_MeadowV</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>205</th>\n",
       "      <td>-0.221659</td>\n",
       "      <td>-0.020662</td>\n",
       "      <td>SaleType_ConLI</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>215</th>\n",
       "      <td>-0.330404</td>\n",
       "      <td>0.000405</td>\n",
       "      <td>SaleCondition_Partial</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>56</th>\n",
       "      <td>-0.342194</td>\n",
       "      <td>-0.131376</td>\n",
       "      <td>MSZoning_C (all)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>143</th>\n",
       "      <td>-0.561503</td>\n",
       "      <td>-0.035774</td>\n",
       "      <td>Exterior1st_BrkComm</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>110</th>\n",
       "      <td>-1.330233</td>\n",
       "      <td>-0.111455</td>\n",
       "      <td>Condition2_PosN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>216 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      coef_lr  coef_ridge                columns\n",
       "106  0.467373    0.010739      Condition2_Artery\n",
       "107  0.393596    0.017622       Condition2_Feedr\n",
       "108  0.365330    0.084865        Condition2_Norm\n",
       "207  0.339613    0.038120           SaleType_New\n",
       "204  0.264316    0.018743         SaleType_ConLD\n",
       "181  0.213903    0.026592       Foundation_Stone\n",
       "212  0.154743    0.015245   SaleCondition_Alloca\n",
       "78   0.150045    0.100805   Neighborhood_Crawfor\n",
       "188  0.133509    0.010646           Heating_Wall\n",
       "3    0.129894    0.033825                 Street\n",
       "57   0.129326    0.055046            MSZoning_FV\n",
       "202  0.117821    0.017477           SaleType_CWD\n",
       "94   0.111724    0.064092   Neighborhood_StoneBr\n",
       "65   0.110127    0.008426       Utilities_AllPub\n",
       "111  0.103934   -0.001771        Condition2_RRAe\n",
       "132  0.103934   -0.001771         RoofStyle_Shed\n",
       "161  0.100445   -0.017429    Exterior2nd_CmentBd\n",
       "149  0.100381    0.018604    Exterior1st_MetalSd\n",
       "144  0.099413    0.036308    Exterior1st_BrkFace\n",
       "214  0.098473    0.030163   SaleCondition_Normal\n",
       "96   0.094376    0.019251   Neighborhood_Veenker\n",
       "60   0.090180    0.016108            MSZoning_RM\n",
       "213  0.086783   -0.004982   SaleCondition_Family\n",
       "190  0.078879    0.014699       Electrical_FuseF\n",
       "23   0.075576    0.063580             CentralAir\n",
       "140  0.075508    0.026190       RoofMatl_WdShngl\n",
       "59   0.074062    0.039079            MSZoning_RL\n",
       "76   0.070421    0.039174   Neighborhood_ClearCr\n",
       "167  0.068798    0.017861      Exterior2nd_Stone\n",
       "103  0.068213    0.044940        Condition1_RRAn\n",
       "..        ...         ...                    ...\n",
       "128 -0.052762   -0.006583        RoofStyle_Gable\n",
       "194 -0.053773   -0.023101      GarageType_2Types\n",
       "165 -0.057182   -0.000786      Exterior2nd_Other\n",
       "159 -0.058387   -0.020280    Exterior2nd_BrkFace\n",
       "89  -0.059175   -0.017109   Neighborhood_OldTown\n",
       "171 -0.059952   -0.026714    Exterior2nd_Wd Shng\n",
       "73  -0.062370   -0.011970   Neighborhood_Blueste\n",
       "177 -0.064660   -0.037551      Foundation_BrkTil\n",
       "117 -0.066124   -0.025881         BldgType_Twnhs\n",
       "102 -0.066656   -0.022320        Condition1_RRAe\n",
       "203 -0.071711    0.002451           SaleType_Con\n",
       "182 -0.074560   -0.001707        Foundation_Wood\n",
       "33  -0.075678   -0.036157           KitchenAbvGr\n",
       "74  -0.077650   -0.010125    Neighborhood_BrDale\n",
       "206 -0.078866    0.006853         SaleType_ConLw\n",
       "200 -0.080598   -0.000395          GarageType_NA\n",
       "208 -0.088781    0.004967           SaleType_Oth\n",
       "139 -0.101727   -0.014992       RoofMatl_WdShake\n",
       "66  -0.110127   -0.008426       Utilities_NoSeWa\n",
       "201 -0.120631   -0.039287           SaleType_COD\n",
       "81  -0.121033   -0.092631    Neighborhood_IDOTRR\n",
       "191 -0.139211   -0.013526       Electrical_FuseP\n",
       "209 -0.140102   -0.028663            SaleType_WD\n",
       "186 -0.144724   -0.033594           Heating_Grav\n",
       "82  -0.192007   -0.048158   Neighborhood_MeadowV\n",
       "205 -0.221659   -0.020662         SaleType_ConLI\n",
       "215 -0.330404    0.000405  SaleCondition_Partial\n",
       "56  -0.342194   -0.131376       MSZoning_C (all)\n",
       "143 -0.561503   -0.035774    Exterior1st_BrkComm\n",
       "110 -1.330233   -0.111455        Condition2_PosN\n",
       "\n",
       "[216 rows x 3 columns]"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mse_mean = np.mean(ridge.cv_values_,axis =0)\n",
    "plt.plot(np.log10(alphas),mse_mean.reshape(len(alphas),1))\n",
    "\n",
    "#这是为了标出最佳参数的位置，不是必须\n",
    "#plt.plot(np.log10(ridge.alpha_)*np.ones(3), [0.28, 0.29, 0.30])\n",
    "\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()\n",
    "\n",
    "print('alpha is:',ridge.alpha_)\n",
    "\n",
    "# 看看各特征的权重系数，系数的绝对值大小可视为该特征的重要性\n",
    "fs = pd.DataFrame({\"columns\":list(columns),\"coef_lr\":list((lr.coef_.T)),\"coef_ridge\":list((ridge.coef_.T))})\n",
    "fs.sort_values(by=['coef_lr'],ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 尝试Lasso"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The mse of LinearRegression on train is 0.008025561137708881\n",
      "The mse of LinearRegression on test is 0.0355961357223303\n",
      "The r2 score of LassoCV on test is 0.7030968573775693\n",
      "The r2 score of LassoCV on train is 0.790244754242612\n"
     ]
    }
   ],
   "source": [
    "from sklearn.linear_model import LassoCV\n",
    "\n",
    "#生成一个LassoCV实例\n",
    "#lasso = LassoCV(alphas = alphas)\n",
    "lasso = LassoCV()\n",
    "\n",
    "#训练\n",
    "lasso.fit(X_train,y_train)\n",
    "\n",
    "#测试\n",
    "y_test_pred_lasso = lasso.predict(X_test)\n",
    "y_train_pred_lasso = lasso.predict(X_train)\n",
    "\n",
    "#打印残差平方和\n",
    "print('The mse of LinearRegression on train is',mean_squared_error(y_train,y_train_pred_lr))\n",
    "print('The mse of LinearRegression on test is',mean_squared_error(y_test,y_test_pred_lr))\n",
    "#评估，使用r2_score评价模型\n",
    "print ('The r2 score of LassoCV on test is', r2_score(y_test,y_test_pred_lasso))\n",
    "print ('The r2 score of LassoCV on train is', r2_score(y_train,y_train_pred_lasso))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 根据残差平方和r2评测结果看，Lasso模型效果不如岭回归及OLS好，岭回归在测试集的预测效果比OLS好"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
